In order to improve computational throughput, a processor may have a pipeline and one or more speculation units which feed instructions speculatively to said pipeline for processing therein. One such speculation unit is a branch prediction unit which predicts whether a conditional branch in a program being executed will be taken or not so that instructions in the predicted branch can be prefetched without causing the pipeline to stall. Another type of speculation unit is known as an out-of-order execution unit. The task of the out-of-order execution unit is to reorder the flow of instructions to optimize performance as the instructions are sent down the pipeline and are scheduled for execution. Instructions are reordered to allow them to execute as quickly as possible as each input operand becomes ready. Out-of-order execution allows instructions following delayed instructions to execute as long as these instructions do not depend on the delayed instructions. Some processors have an execution trace building unit (trace cache) wherein already decoded instructions are stored in the form of program ordered sequences of microinstructions called traces. Most instructions in a program are fetched and executed from the trace cache. Only when there is a trace cache miss does the microarchitecture fetch and decode instructions from memory. Usually a trace cache has its own branch predictor that directs where instruction fetching needs to go next in the trace cache. Thus the trace cache branch predictor predicts return addresses speculatively and hence the trace cache can be considered to be another speculation unit.
Processors which execute instructions speculatively generally consume more power than processors which do not. Thus, for example, when running a notebook computer on battery power it may be more important to conserve power than to try to increase computational throughput by speculative execution.